package com.jxb.test20241216;

import com.jxb.first.ListNode;

public class RemoveDuplicates_83 {

    public static void main(String[] args) {
        ListNode listNode1 = new ListNode();
        listNode1.val = 1;
        ListNode listNode2 = new ListNode();
        listNode2.val = 2;
        ListNode listNode3 = new ListNode();
        listNode3.val = 2;
        ListNode listNode4 = new ListNode();
        listNode4.val = 3;
        listNode4.next = null;
        listNode3.next = listNode4;
        listNode2.next = listNode3;
        listNode1.next = listNode2;
        ListNode listNode = deleteDuplicatesRecursive(listNode1);
//        ListNode listNode = deleteDuplicatesRecursive(listNode1);
        System.out.println(listNode);
    }


    public static ListNode removeDuplicatesNode(ListNode listNode) {
        ListNode c = listNode;
        while (c.next != null) {
            //这里操作的是堆中的引用，没有给本地变量赋值
            if (c.val == c.next.val) {
                c.next = c.next.next;
            }else {
                //这是对栈中的本地变量赋值，不是对堆中的引用赋值
                c = c.next;
            }
        }
        return listNode;
    }


    public static ListNode deleteDuplicatesRecursive(ListNode listNode) {
        if (listNode == null || listNode.next == null) {
            return listNode;
        }
        listNode.next = deleteDuplicatesRecursive(listNode.next);
        if (listNode.val == listNode.next.val) {
            return listNode.next;
        }
        return listNode;
    }


    //逆序
//    public static ListNode deleteDuplicatesRecursive(ListNode listNode) {
//        if (listNode == null || listNode.next == null) {
//            return listNode;
//        }
//        listNode.next = deleteDuplicatesRecursive(listNode.next);
//        if (listNode.val == listNode.next.val) {
//            return listNode.next;
//        }else {
//            return listNode;
//        }
//    }
}
